정원의 자연스러운 형태가 야생인 것처럼 소프트웨어의 자연스러운 상태는 큰 진흙공이다. 이런 붕괴를 막으려면 정해진 방향으로(정원사가 정원을 가꾸는 것처럼) 에너지를 소비해야 한다.
캡슐화와 추상화
캡슐화
는 행동의 단순화와 데이터 은닉(감추기) 두 가지 단어가 밀접하게 연관된 아이디어를 뜻한다. 행동을 캡슐화해주는 객체나 함수를 추상화
라고 한다.handle = urlopen('http://domain.com' + '?' + urlencode(params)) raw_text = handle.read().decode('utf8') parsed = json.loads(raw_text)
parsed = request.get('http://domain.com', params=params).json()
두 코드는 같은 일을 하지만 두 번째 방식이 더 잘 읽히고 이해하기 쉽다. 이유는 더 높은 수준의 추상화를 갖추었기 때문이다.
계층화
객체와 함수들의 상호작용에도 주의를 기울여야 한다. 큰 진흙공에서는 의존성이 제어할 수 없을 정도로 복잡하다. 그래서 어느 한 노드를 변경하기 어려운 경우가 많다. 계층화 아키텍쳐는 이 문제를 해결하는 방법 중 하나다. 계층화한 아키텍쳐에서는 코드를 서로 구분하는 범주나 역할로 분할하고, 어던 코드 범주가 어떤 코드 범주를 호출할 수 있는지에 대한 규칙을 도입한다.
graph TD 표현_계층 --> 비즈니스_로직 --> 데이터베이스_계층
의존성 역전 원칙
1. 고수준의 모듈은 저수준 모듈에 의존해서는 안된다. 두 모듈 모두 추상화에 의존해야 한다. 2. 추상화는 세부 사항에 의존해서는 안된다. 반대로 세부 사항은 추상화에 의존해야 한다.
고수준 모듈은 실세계의 개념을 처리하는 함수, 클래스, 패키지를 말하고, 저수준은 고수준을 뒷받침하는 기계적인 영역에 가깝다. 고수준의 모듈은 비즈니스의 필요에 따라 쉽게 변경이 가능해야 한다. 저수준의 모듈은 상대적으로 변경하기 어렵다.
댓글